﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Linq;
using System.Data.SqlClient;
using System.Linq;
using System.Net.Mail;
using System.Net;
using System.Runtime.Serialization;
using System.Text;
using System.Transactions;
using DS_Gimnasio;

namespace BS_Gimnasio.General
{
    [DataContract()]
    public class cls_EnviarCorreos
    {
        #region Variables

        private SmtpClient _smtp;
        private MailMessage _email;

        private string _destinatario;
        private string _asunto;
        private bool _HTML;
        private string _mensaje;

        private Attachment _archivo;

        #endregion

        #region Propiedades
        [DataMember()]
        public Attachment Archivo
        {
            get { return _archivo; }
            set { _archivo = value; }
        }
        public SmtpClient SMTP
        {
            get { return _smtp; }
            set { _smtp = value; }
        }

        public MailMessage Email
        {
            get { return _email; }
            set { _email = value; }
        }

        [DataMember()]
        public string Asunto
        {
            get { return _asunto; }
            set { _asunto = value; }
        }

        [DataMember()]
        public string Destinatario
        {
            get { return _destinatario; }
            set { _destinatario = value; }
        }

        [DataMember()]
        public string Mensaje
        {
            get { return _mensaje; }
            set { _mensaje = value; }
        }

        [DataMember()]
        public bool HTML
        {
            get { return _HTML; }
            set { _HTML = value; }
        }

        #endregion

        #region Metodos

        private DataTable Servidor(int idUsuario)
        {
            dtacls_GimnasioDataContext linqDataContext = new dtacls_GimnasioDataContext();
            {
                ISingleResult<SP_Seleccionar_Todo_Servidores_CorreosResult> resultadoServidores = linqDataContext.SP_Seleccionar_Todo_Servidores_Correos(idUsuario);
                return cls_Adaptador.ToDataTable(resultadoServidores.ToList());
            }
        }

        private void Iniciar(int idUsuario, ref string mesajeError)
        {
            if (Servidor(idUsuario).Rows.Count > 0)
            {
                DataTable Server = Servidor(idUsuario);
                cls_AES AES = new cls_AES();

                Email = new MailMessage();
                Email.From = new MailAddress(Server.Rows[0][2].ToString());

                SMTP = new SmtpClient();
                SMTP.Host = Server.Rows[0][3].ToString();
                SMTP.Port = Convert.ToInt32(Server.Rows[0][4]);
                SMTP.EnableSsl = Convert.ToBoolean(Server.Rows[0][5]);
                SMTP.UseDefaultCredentials = Convert.ToBoolean(Server.Rows[0][6]);
                SMTP.Credentials = new NetworkCredential(Server.Rows[0][7].ToString(), AES.Desencriptar(Server.Rows[0][8].ToString()));
            }

            else
                mesajeError = "No se ha declarado ningun servidor de correo predeterminado";
        }

        public cls_EnviarCorreos envioCorreoElectronico(int idUsuario, ref string mesajeError)
        {
            Iniciar(idUsuario, ref  mesajeError);
            Email.To.Add(new MailAddress(Destinatario));
            Email.Subject = Asunto;
            Email.Body = Mensaje;
            Email.IsBodyHtml = true;
            if(_archivo != null)
                Email.Attachments.Add(_archivo);

            try
            {
                SMTP.Send(Email);
                Email.Dispose();

                mesajeError = "Correo electrónico fue enviado satisfactoriamente";
            }

            catch (Exception ex)
            {
                mesajeError = "MensajeError enviando correo electrónico: " + ex.Message;
            }

            return this;
        }

        #endregion

    }
}
